package com.imooc.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

/**
 * Created by joe on 17-3-19.
 */
@Aspect
@Component
public class HttpAspect {

  private final static Logger logger = org.slf4j.LoggerFactory.getLogger(HttpAspect.class);

  /*@Before("execution(public * com.imooc.controller.GirlController.*(..))")//方法执行之前验证
  public void log(){
    System.out.println(11111111);
  }

  @After("execution(public * com.imooc.controller.GirlController.*(..))")
  public void doAfter(){
    System.out.println(222222);
  }*/

  @Pointcut("execution(public * com.imooc.controller.GirlController.*(..))")
  public void log() {
  }

  @Before("log()")
  public void doBefore(JoinPoint joinPoint) {
//    logger.info("111111111111");

    ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    HttpServletRequest request = attributes.getRequest();

    //url
    logger.info("url={}", request.getRequestURL());

    //method
    logger.info("method={}", request.getMethod());

    //ip
    logger.info("method={}", request.getRemoteAddr());

    //类方法
    logger.info("class_method={}", joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());

    //参数
    logger.info("args={}", joinPoint.getArgs());
  }

  @After("log()")
  public void doAfter() {
    logger.info("22222222222222");
  }

  @AfterReturning(returning = "object", pointcut = "log()")
  public void doAfterReturning(Object object) {
    logger.info("response={}", object.toString());
  }
}
